// https://github.com/klover2/wechatpay-node-v3-ts
// https://wechatpay-api.gitbook.io/wechatpay-api-v3/
// https://pay.weixin.qq.com/docs/merchant/apis/jsapi-payment/payment-notice.html

const mongoose = require('mongoose');

const { Schema } = mongoose;
// 退款结果通知
const name = 'WxPayRefundNotify';

const schema = new Schema({
  hotel_id: String,  // 酒店id, 系统生成
  id: { type: String, index: true, unique: true },  // 通知的唯一ID。
  create_time: String, // 通知创建的时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss.表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示北京时间2015年05月20日13点29分35秒。
  event_type: String, // 通知的类型：REFUND.SUCCESS：退款成功通知 REFUND.ABNORMAL：退款异常通知 REFUND.CLOSED：退款关闭通知 示例值：REFUND.SUCCESS
  summary: String, // 通知简要说明 示例值：退款成功
  resource_type: String, // 通知的资源数据类型，支付成功通知为encrypt-resource
  resource: { // 通知资源数据。
    algorithm: String, // 对开启结果数据进行加密的加密算法，目前只支持AEAD_AES_256_GCM 示例值：AEAD_AES_256_GCM
    original_type: String, // 加密前的对象类型，退款通知的类型为refund 示例值：refund
    ciphertext: String, // Base64编码后的开启/停用结果数据密文。
    associated_data: String, // 附加数据。
    nonce: String, // 加密使用的随机串。
  },
  appid: String, // 直连商户申请的公众号或移动应用AppID。
  mchid: String, // 商户的商户号，由微信支付生成并下发。
  out_trade_no: String,  // 返回的商户订单号 示例值： 1217752501201407033233368018
  transaction_id: String, // 微信支付订单号 示例值： 1217752501201407033233368018
  out_refund_no: String, // 商户退款单号 示例值： 1217752501201407033233368018
  refund_id: String, // 微信退款单号 示例值： 1217752501201407033233368018
  refund_status: String, // 退款状态，枚举值：SUCCESS：退款成功 CLOSED：退款关闭 ABNORMAL：退款异常，退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往【商户平台—>交易中心】，手动处理此笔退款 示例值：SUCCESS
  success_time: String, // 1、退款成功时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC 8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日13点29分35秒。
  // 2、当退款状态为退款成功时返回此参数。示例值：2018-06-08T10:34:56+08:00
  user_received_account: String, // 取当前退款单的退款入账方。
  // 1、退回银行卡：{银行名称}{卡类型}{卡尾号}
  // 2、退回支付用户零钱: 支付用户零钱
  // 3、退还商户: 商户基本账户、商户结算银行账户
  // 4、退回支付用户零钱通：支付用户零钱通
  // 示例值：招商银行信用卡0403
  amount: { // 订单金额信息
    total: Number, // 订单总金额，单位为分，只能为整数，详见支付金额 示例值：999
    refund: Number, // 退款金额，币种的最小单位，只能为整数，不能超过原订单支付金额，如果有使用券，后台会按比例退。 示例值：999
    payer_total: Number, // 用户实际支付金额，单位为分，只能为整数，详见支付金额 示例值：999
    payer_refund: Number, // 退款给用户的金额，不包含所有优惠券金额 示例值：999
  },

}, {
  strict: false,
  optimisticConcurrency: true,
  timestamps: true
});

schema.index({ hotel_id: 1 });

export default mongoose.model(name, schema);
